package com.cz.nongyetongv5.custom.PaintView;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import com.cz.nongyetongv5.custom.wheelview.Utils;

public class PaintView extends View {

	/**
	 * 背景颜色
	 */
	private static final int BACKGROUND_COLOR = Color.WHITE;

	private static final int PAINT_COLOR = Color.BLACK;

	/**
	 * 画笔对象
	 */
	private Paint paint;

	/**
	 * 画布对象
	 */
	private Canvas cacheCanvas;

	/**
	 * 位图
	 */
	private Bitmap cachebBitmap;

	/**
	 * 画笔路径对象
	 */
	private Path path;

	/**
	 * 判断是否绘制了内容
	 */
	private boolean isInput = false ;


	/**
	 * 是否存在内容
	 */
	private boolean hasContent = false ;




	public PaintView(Context context) {
		super(context);
		init();
	}

	public PaintView(Context context, AttributeSet attribute) {
		super(context, attribute);

		init();
	}

	public PaintView(Context context, AttributeSet attribute, int defStyle) {
		super(context, attribute, defStyle);
		init();
	}

	/**
	 * 初始化一些信息
	 */
	public void init() {

		// 初始化画笔对象
		paint = new Paint();
		// 扛锯齿
		paint.setAntiAlias(true);

		int strokeWidth = Utils.dip2px(this.getContext(), 3) ;

		// 设置线的宽度
		paint.setStrokeWidth(strokeWidth);

		// 设置画笔样式
		paint.setStyle(Paint.Style.STROKE);
		// 设置画壁的颜色
		paint.setColor(PAINT_COLOR);

		path = new Path();

	}

	public Bitmap getImage() {
		return this.cachebBitmap;
	}

	public void setImage(Bitmap cachebBitmap) {

		if (cachebBitmap != null){
			// 有图片
			hasContent = true ;
		}

		this.cachebBitmap = cachebBitmap;
		invalidate();


	}

	/**
	 * 判断是否存在内容
	 * @return
	 */
	public boolean isHasContent() {

		// 如果输入了内容,并且有原来的内容存在

		// 如果第一次进行绘制
		if (isInput && !hasContent){
			return true ;

		}else if (!isInput && hasContent){
			// 如果是有内容但没有绘制
			return true ;
		}else if (isInput && hasContent){

			// 如果是有内容并且绘制
			return true ;
		}else{
			return false ;
		}
	}


	public void setHasContent(boolean hasContent) {
		this.hasContent = hasContent;
	}

	/**
	 * @return 是否输入了内容
	 */
	public boolean isInput() {
		return isInput;
	}

	/*
	 * 清除绘制的图
	 */
	public void clear() {

		// 清除之后设置状态
		hasContent = false;
		isInput = false ;

		if (cacheCanvas != null) {

			// 将背景重绘即可
			paint.setColor(BACKGROUND_COLOR);
			cacheCanvas.drawPaint(paint);
			paint.setColor(PAINT_COLOR);
			cacheCanvas.drawColor(BACKGROUND_COLOR);
			path.reset();

			invalidate();
		}
	}

	@Override
	protected void onDraw(Canvas canvas) {

		/**
		 * 如果是第一次进行OnDraw则进行信息的初始化,这些信息必须在onDraw之后才会获得
		 */
		if (cachebBitmap == null ) {
			// 创建一个位图
			cachebBitmap = Bitmap.createBitmap(this.getWidth(),
					this.getHeight(), Config.ARGB_8888);
		}

		if ( cacheCanvas == null){
			// 创建出画布
			cacheCanvas = new Canvas(cachebBitmap);
			canvas.drawColor(BACKGROUND_COLOR);
		}


		// 绘制视图,这里的画布是界面上的视图
		canvas.drawColor(BACKGROUND_COLOR);

		// 绘制经过Touch_UP 的bitmap
		canvas.drawBitmap(cachebBitmap, 0, 0, null);

		// draw Path到界面
		canvas.drawPath(path, paint);


	}

	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {

		int curW = cachebBitmap != null ? cachebBitmap.getWidth() : 0;
		int curH = cachebBitmap != null ? cachebBitmap.getHeight() : 0;
		if (curW >= w && curH >= h) {
			return;
		}

		if (curW < w)
			curW = w;
		if (curH < h)
			curH = h;

		Bitmap newBitmap = Bitmap.createBitmap(curW, curH,
				Bitmap.Config.ARGB_8888);


		Canvas newCanvas = new Canvas();
		newCanvas.setBitmap(newBitmap);

		if (cachebBitmap != null) {
			newCanvas.drawBitmap(cachebBitmap, 0, 0, null);
		}
		cachebBitmap = newBitmap;
		cacheCanvas = newCanvas;
	}

	private float cur_x, cur_y;

	// 根据Touch的不同位置绘制图片
	@Override
	public boolean onTouchEvent(MotionEvent event) {

		float x = event.getX();
		float y = event.getY();

		switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN: {
				cur_x = x;
				cur_y = y;
				path.moveTo(cur_x, cur_y);
				break;
			}

			case MotionEvent.ACTION_MOVE: {

				// 如果相同,说明只是按下并没有移动
				if (cur_x == x && cur_y == y) {

					isInput = false;

				} else {

					isInput = true;
				}

				path.quadTo(cur_x, cur_y, x, y);
				cur_x = x;
				cur_y = y;

				break;
			}

			case MotionEvent.ACTION_UP: {

				// 如果没有内容则绘制背景
				if (!hasContent){
					// 当键盘弹起将路径绘制到图片上,这里的绘制是绘制最终图片的
					cacheCanvas.drawColor(BACKGROUND_COLOR);
				}

				//  绘制已经存在的bitmap
				cacheCanvas.drawBitmap(cachebBitmap, 0, 0, null);

				cacheCanvas.drawPath(path, paint);

				break;
			}
		}

		invalidate();

		return true;
	}
}